﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanCafe.QuanCafe_BUS_WebService;
using System.Threading;
using System.Drawing;
using System.Drawing.Printing;

namespace QuanCafe
{
    public partial class frmPhieuDat : Form
    {

        #region Khởi tạo các biến

        // tạo 1 biến service
        private QuanCafe_BUS_WebServiceSoapClient ws = new QuanCafe_BUS_WebServiceSoapClient();

        // tạo 1 biến lưu giá trị dòng hiện tại trong gridview
        private int _donghientai = 0;
        private string _manhanvien;

        #endregion


        #region Khởi tạo các delegate

        #endregion


        #region Xử lý ban đầu

        public frmPhieuDat()
        {
            InitializeComponent();
            
            // sử dụng lớp DataGridViewColumnSelector
            DataGridViewColumnSelector cs_PhieuDat = new DataGridViewColumnSelector(dgvPhieuDat);
            cs_PhieuDat.MaxHeight = 200;
            cs_PhieuDat.Width = 200;
            DataGridViewColumnSelector cs_ThucUong = new DataGridViewColumnSelector(dgvThucUong);
            cs_ThucUong.MaxHeight = 200;
            cs_ThucUong.Width = 200;

        }

        private void ttpInfo_Draw(object sender, DrawToolTipEventArgs e)
        {
            e.DrawBackground();
            e.DrawText();
        }

        private void frmPhieuDat_Load(object sender, EventArgs e)
        {
            try
            {
                dgvPhieuDat.Focus();
                // load lên danh sách phiếu đặt
                dgvPhieuDat.DataSource = ws.PD_LayDanhSachPhieuDat();
                // lấy ra danh sách thức uống của dòng hiện tại
                dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[0].Cells[1].Value.ToString());
                cbbSearch.SelectedIndex = 0;
                txtSoLuong.Text = ws.PD_LaySoLuongThucUong(dgvPhieuDat.Rows[0].Cells[0].Value.ToString()).ToString();
                bindding();
            }
            catch
            { 
            
            }
        }

        #endregion


        #region Xử lý các sự kiện chính

        // viết hàm binding
        private void bindding()
        {
            txtMaPhieuDat.DataBindings.Clear();
            txtMaPhieuDat.DataBindings.Add("Text", dgvPhieuDat.DataSource, "Maphieu");
            txtMaBan.DataBindings.Clear();
            txtMaBan.DataBindings.Add("Text", dgvPhieuDat.DataSource, "Maban");
            txtTrangThai.DataBindings.Clear();
            txtTrangThai.DataBindings.Add("Text", dgvPhieuDat.DataSource, "Trangthai");
            txtTongTien.DataBindings.Clear();
            txtTongTien.DataBindings.Add("Text", dgvPhieuDat.DataSource, "Tongtien");
        }


        private void dgvPhieuDat_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgvPhieuDat.CurrentRow != null)
                {
                    if (dgvPhieuDat.CurrentRow.Index != _donghientai)
                    {
                        _donghientai = dgvPhieuDat.CurrentRow.Index;
                        // lấy số lượng thức uống
                        txtSoLuong.Text = ws.PD_LaySoLuongThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString()).ToString();
                        // load thức uống của phiếu này
                        dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString());
                    }
                }
                else
                {

                }
            }
            catch
            {
                // xuất ra thông báo
                MessageBox.Show("Phiếu đặt đã bị xóa!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvPhieuDat_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Up)
                {
                    // lấy số lượng thức uống
                    _donghientai = dgvPhieuDat.CurrentRow.Index - 1;
                    txtSoLuong.Text = ws.PD_LaySoLuongThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString()).ToString();
                    // load thức uống của phiếu này
                    dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString());
                }
                else
                {
                    if (e.KeyCode == Keys.Down)
                    {
                        // lấy số lượng thức uống
                        _donghientai = dgvPhieuDat.CurrentRow.Index + 1;
                        txtSoLuong.Text = ws.PD_LaySoLuongThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString()).ToString();
                        // load thức uống của phiếu này
                        dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[_donghientai].Cells[1].Value.ToString());
                    }
                }
            }
            catch
            { 
                
            }
        }

        // xem các phiếu đặt
        private void btnXemPhieu_Click(object sender, EventArgs e)
        {
            try
            {
                // load lên danh sách phiếu đặt
                dgvPhieuDat.DataSource = ws.PD_LayDanhSachPhieuDat();
                if (dgvThucUong.Rows.Count != 0)
                { 
                    // lấy ra danh sách thức uống của dòng hiện tại
                dgvThucUong.DataSource = ws.TUDD_LayDanhSachThucUong(dgvThucUong.Rows[0].Cells[1].Value.ToString());
                bindding();
                }
            }
            catch
            { 
            
            }
        }

        // viết hàm tính tiền và xuất ra hóa đơn
        private void btnXuatHoaDon_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvPhieuDat.Rows.Count != 0)
                {
                    // b1: upload thông tin hóa đơn
                    // tạo chuỗi ngày
                    string s = TaoChuoiNgay();
                    // lấy ra tổng tiền
                    float tongsotien = float.Parse(dgvPhieuDat.CurrentRow.Cells[3].Value.ToString());

                    // gọi service => thực hiện việc cập nhật hóa đơn
                    bool flag = ws.HD_UpHoaDonThanhToan(s, tongsotien);
                    if (flag == true) // thêm thành công
                    {
                        // xóa thức uống của phiếu đặt
                        ws.TUDD_XoaThucUongCuaPhieuDat(dgvPhieuDat.CurrentRow.Cells[1].Value.ToString());
                        dgvThucUong.DataSource = null;
                        // xóa phiếu đăt đi
                        ws.PD_XoaPhieuDat(dgvPhieuDat.CurrentRow.Cells[1].Value.ToString());
                    }

                    // b3: xuất thông báo
                    MessageBox.Show("Thanh toán thành công", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    // cập nhật lại gridview
                    btnXemPhieu_Click(sender, e);
                }
            }
            catch (Exception x)
            {

            }
        }

        // viết hàm tạo chuỗi ngày
        private string TaoChuoiNgay()
        {
            string _chuoingay;

            // thêm vào ngày
            string temp = DateTime.Now.Day.ToString();
            if (temp.Length == 1)
            {
                _chuoingay = "0" + temp + "/";
            }
            else
            {
                _chuoingay = temp + "/";
            }

            // thêm vào tháng
            temp = DateTime.Now.Month.ToString();
            if (temp.Length == 1)
            {
                _chuoingay += "0" + temp + "/";
            }
            else
            {
                _chuoingay += temp + "/";
            }

            // thêm vào năm
            _chuoingay += DateTime.Now.Year.ToString();

            return _chuoingay;


        }


        // viết hàm in phiếu đặt ra
        private void btnInPhieu_Click(object sender, EventArgs e)
        {
            printDialog1.Document = printDocument1;
            DialogResult result = printDialog1.ShowDialog();
            if (result == DialogResult.OK)
                printDocument1.Print();
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Graphics graphic = CreateGraphics();
            Image memImage = new Bitmap(Size.Width, Size.Height, graphic);
            Graphics memGraphic = Graphics.FromImage(memImage);
            IntPtr dc1 = graphic.GetHdc();
            IntPtr dc2 = memGraphic.GetHdc();

            graphic.ReleaseHdc(dc1);
            memGraphic.ReleaseHdc(dc2);
            e.Graphics.DrawImage(memImage, 0, 0);
        }



        #endregion

        #region Xử lý liên quan đến thread

        #endregion


        #region Search dữ liệu

        private void btnSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtTuKhoa.Text.Length != 0)
                {
                    if (cbbSearch.SelectedIndex == 0) // chọn mã
                    {
                        dgvPhieuDat.DataSource = ws.PD_TraPhieuDatTheoMaBan(txtTuKhoa.Text);
                        // lấy ra danh sách thức uống của dòng hiện tại
                        dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[0].Cells[1].Value.ToString());
                        bindding();
                    }
                    else
                    {
                        if (cbbSearch.SelectedIndex == 1) // chọn trạng thái
                        {
                            dgvPhieuDat.DataSource = ws.PD_TraPhieuDatTheoTrangThai(txtTuKhoa.Text);// lấy ra danh sách thức uống của dòng hiện tại
                            // lấy ra danh sách thức uống của dòng hiện tại
                            dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[0].Cells[1].Value.ToString());
                            bindding();
                        }
                        else // chọn theo tổng tiền
                        {
                            float tongtien = float.Parse(txtTuKhoa.Text);
                            dgvPhieuDat.DataSource = ws.PD_TraPhieuDatTheoTongTien(tongtien);
                            // lấy ra danh sách thức uống của dòng hiện tại
                            dgvThucUong.DataSource = ws.PD_LayDanhSachThucUong(dgvPhieuDat.Rows[0].Cells[1].Value.ToString());
                            bindding();
                        }
                    }
                }
            }
            catch (Exception x)
            {
                
            }
        }

        private void txtTuKhoa_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSearch_Click(sender, e);
            }
        }

        #endregion

       

    }
}
